#ifndef __STORMWIDGET_STORMWIDGET_UILIBRARY_CMARKUPNODE_MARKUPNODE_H
#define __STORMWIDGET_STORMWIDGET_UILIBRARY_CMARKUPNODE_MARKUPNODE_H

class CMarkup;

class CMarkupNode
{
	friend CMarkup;
public:
	CMarkupNode(void);
	CMarkupNode(CMarkup* pOwner, int iPos);
	virtual ~CMarkupNode(void);
public:
	bool IsValid() const;

	CMarkupNode GetParent();
	CMarkupNode GetSibling();
	CMarkupNode GetChild();
	CMarkupNode GetChild(LPCTSTR pstrName);

	bool HasSiblings() const;
	bool HasChildren() const;
	LPCTSTR GetName() const;
	LPCTSTR GetValue() const;

	bool HasAttributes();
	bool HasAttribute(LPCTSTR pstrName);
	int GetAttributeCount();
	LPCTSTR GetAttributeName(int iIndex);
	LPCTSTR GetAttributeValue(int iIndex);
	LPCTSTR GetAttributeValue(LPCTSTR pstrName);
	bool GetAttributeValue(int iIndex, LPTSTR pstrValue, SIZE_T cchMax);
	bool GetAttributeValue(LPCTSTR pstrName, LPTSTR pstrValue, SIZE_T cchMax);
private:
	void _MapAttributes();

	enum { MAX_XML_ATTRIBUTES = 20 };

	typedef struct
	{
		ULONG iName;
		ULONG iValue;
	} XMLATTRIBUTE;

	int m_iPos;
	int m_nAttributes;
	XMLATTRIBUTE m_aAttributes[MAX_XML_ATTRIBUTES];
	CMarkup* m_pOwner;
};

#endif //__STORMWIDGET_STORMWIDGET_UILIBRARY_CMARKUPNODE_MARKUPNODE_H
